package test_pkg

import (
	"fmt"
	"time"
)

// 证明通道的阻塞性
func Chennel_block3() {
	ch := make(chan int) //无缓冲通道 只能包含一个元素 会阻塞
	fmt.Println("start ch", time.Now().Local().Format("2006-01-02 15:04:05"))
	go func() {
		time.Sleep(5 * time.Second)
		fmt.Println(<-ch) //会阻塞 有输出
	}()

	fmt.Println("send ch", time.Now().Local().Format("2006-01-02 15:04:05"))
	ch <- 10
	fmt.Println("sent ch", time.Now().Local().Format("2006-01-02 15:04:05"))

	ch1 := make(chan int, 20) //缓冲通道 容量 20 异步的 不会阻塞
	fmt.Println("start ch1", time.Now().Local().Format("2006-01-02 15:04:05"))
	go func() {
		time.Sleep(5 * time.Second)
		fmt.Println(<-ch1) //无阻塞，异步，程序会中止 无输出
	}()

	fmt.Println("send ch1", time.Now().Local().Format("2006-01-02 15:04:05"))
	ch1 <- 100
	fmt.Println("sent ch1", time.Now().Local().Format("2006-01-02 15:04:05"))
}
